package com.jing.system.utils.loadresource.handler;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.jing.system.tags.loadresource.CssTag;
import com.jing.system.tags.loadresource.JsTag;
import com.jing.system.utils.loadresource.LoadResourceUtil;
import com.jing.system.utils.loadresource.model.Item;

/**
 * 获取资源信息类
 * @author jing.yue
 * @version 1.0
 * @since 2012-10-12
 * 
 */
public class LoadResourceHandler extends DefaultHandler {

	private StringBuffer currentValue = new StringBuffer();

	/**  
	 * 开始解析xml时触发  
	 */  
	@Override  
	public void startDocument() throws SAXException { }

	/**
	 * 定义开始解析元素的方法. 这里是将<xxx>中的名称xxx提取出来
	 */
	@Override
	public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
		if("resource".equalsIgnoreCase(name)) {
			String attrNameVal = attributes.getValue("name").trim();
			String path = attributes.getValue("value").trim();
			if(path.lastIndexOf(".js") != -1) {
                JsTag.jsMap.put(attrNameVal, path);
            }
            else if(path.lastIndexOf(".css") != -1) {
            	CssTag.cssMap.put(attrNameVal, path);
            }
		}
		else if("pack".equalsIgnoreCase(name)) {
			LoadResourceUtil.isPack = ("true".equals(attributes.getValue("isPack").trim()) ? true : false);
			LoadResourceUtil.packPath = attributes.getValue("packPath").trim();
		}
		else if("item".equalsIgnoreCase(name)) {
			Item item = new Item();
			item.setName(attributes.getValue("name").trim());
			item.setValue(attributes.getValue("value").trim());
			item.setType(attributes.getValue("type").trim());
			LoadResourceUtil.packMap.put(item.getValue(), item);
		}
	}

	/**
	 * 这里是将<xxx></xxx>之间的值加入到currentValue
	 */
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		currentValue.append(ch, start, length);
	}

	/**
	 *解析到xml文档的末尾时触发
	 */
	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
	}

	/**
	 * 在遇到</xxx>结束后,将之前的名称和值一一对应保存在props中
	 */
	@Override
	public void endElement(String uri, String localName, String name) throws SAXException {
		currentValue.setLength(0);
	}
}